package archimede;

import java.awt.Font;
import java.awt.Graphics;
import java.io.IOException;
import java.util.Scanner;

import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfImportedPage;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * classe intermedia per la raccolta dei dati dell'edificio
 * 
 * @author root
 * 
 */
public class BuildingData extends JPanel {

  /**
   * dati edifici
   */
  private DatiEdificio datiEdificio;

  /**
   * muri e pareti
   */
  private MuriEPareti muriEpareti;

  /**
   * impermeabilizzazione
   */
  private Impermeabilizzazione impermeabilizzazione;

  /**
   * INTONACO
   */
  private Intonaco intonaco;
  /**
   * MURI INTERMEDI
   */
  private MuriIntermediPanel muriIntermedi;
  /**
   * MURI PERIMETRALI
   */
  private MuriPerimetraliPanel muriPerimetrali;

  /**
   * setta il colore di sfondo
   */

  protected void paintComponent(Graphics g) {
    setOpaque(false);
    g.drawImage(
        (new ImageIcon(ClassLoader.getSystemResource("sfondo.jpg"))).getImage(),
        0, 0, null);
    super.paintComponent(g);
  }

  /**
   * 
   * @param st
   *          frame principale
   * @param de
   *          dati edificio
   */
  public BuildingData(final StartingWindow st, DatiEdificio de) {
    super();
    // inizializza
    datiEdificio = de;
    impermeabilizzazione = new Impermeabilizzazione(st);
    intonaco = new Intonaco(st);
    muriIntermedi = new MuriIntermediPanel(st);
    muriPerimetrali = new MuriPerimetraliPanel(st);
    muriEpareti = new MuriEPareti(st);

    setLayout(new MigLayout("", "", "25[]5[]25[]5[]25[]5[]"));

    JLabel tre_1 = new JLabel("Caratteristiche dei muri");
    tre_1.setFont(new Font("Arial", Font.BOLD, 20));

    JLabel tre_2 = new JLabel("Impermeabilizzazione");
    tre_2.setFont(new Font("Arial", Font.BOLD, 20));

    JLabel tre_3 = new JLabel("Tipo dell'intonaco,della pittura e periodo");
    tre_3.setFont(new Font("Arial", Font.BOLD, 20));

    add(tre_1, "wrap , gapleft 15");
    add(muriEpareti, "wrap, gapleft 15");
    add(muriPerimetrali, "wrap , gapleft 15");
    add(muriIntermedi, "wrap , gapleft 15");

    add(tre_2, "wrap, gapleft 15");
    add(impermeabilizzazione, "wrap, gapleft 15");

    add(tre_3, "wrap, gapleft 15");
    add(intonaco, "wrap, gapleft 15");

  }

  public String print() {
    String print = "";
    print = print + datiEdificio.print();
    print = print + muriEpareti.print();
    print = print + muriPerimetrali.print();
    print = print + muriIntermedi.print();
    print = print + impermeabilizzazione.print();
    print = print + intonaco.print();
    print = print + "\n@@Building data end";
    return print;
  }

  public void setFields(String done) {
    Scanner c = new Scanner(done);
    c.nextLine();
    String data = "";
    // 20 righe per dati edificio
    for (int i = 0; i < 30; i++) {
      data = data + "\n" + c.nextLine().substring(1);
    }
    // System.out.println("+++ dati edificio +++\n" + data);
    datiEdificio.setElement(data);

    // max=numero di professionisti , 10 righe per professionista
    int max = 0;
    try {
      data = c.nextLine().substring(1);
      // System.out.println(data);
      max = Integer.parseInt(data);
    } catch (Exception e) {
      max = 0;
    }
    for (int i = 0; i < max; i++) {
      for (int j = 0; j < 11; j++)
        data = data + "\n" + c.nextLine().substring(1);
    }
    datiEdificio.setProfessionista(data);

    // 5 righe dati edificio
    data = "";
    for (int i = 0; i < 5; i++) {
      data = data + "\n" + c.nextLine().substring(1);
    }
    // System.out.println("+++ dati edificio +++\n" + data);
    muriEpareti.setElement(data);

    // max=numero muri perimetrali , 8 righe per muro
    max = 0;
    try {
      data = c.nextLine().substring(1);
      max = Integer.parseInt(data);
    } catch (Exception e) {
      max = 0;
    }
    for (int i = 0; i < max; i++) {
      for (int j = 0; j < 8; j++)
        data = data + "\n" + c.nextLine().substring(1);
    }
    // System.out.println("+++ muriPerimetrali add +++\n" + "\n" + data);
    muriPerimetrali.setElement(data);

    // max=numero muri intermedi , 4 righe per muro
    max = 0;
    try {
      data = c.nextLine().substring(1);
      // System.out.println(data);
      max = Integer.parseInt(data);
    } catch (Exception e) {
      max = 0;
    }
    // data = "";
    for (int i = 0; i < max; i++) {
      for (int j = 0; j < 4; j++)
        data = data + "\n" + c.nextLine().substring(1);
    }
    // System.out.println("+++ muriIntermedi add +++\n" + "\n" + data);
    muriIntermedi.setElement(data);

    // 24 righe impermeabilizzazione
    data = "";
    for (int i = 0; i < 24; i++) {
      data = data + "\n" + c.nextLine().substring(1);
    }
    // System.out.println("+++ impermeabilizzazione +++\n" + data);
    impermeabilizzazione.setElement(data);

    // 3 righe per intonaco esterno
    data = "";
    for (int i = 0; i < 3; i++) {
      data = data + "\n" + c.nextLine().substring(1);
    }
    intonaco.setElement(data);

    // max=numero di lati , 5 righe per lato
    max = 0;
    try {
      data = c.nextLine().substring(1);
      // System.out.println(data);
      max = Integer.parseInt(data);
    } catch (Exception e) {
      max = 0;
    }
    for (int i = 0; i < max; i++) {
      for (int j = 0; j < 5; j++)
        data = data + "\n" + c.nextLine().substring(1);
    }
    intonaco.setLatoIntonaco(data);

    // note dell'intonaco
    data = "";
    data = data + c.nextLine().substring(1);
    while (c.hasNextLine()) {
      data = data + "\n" + c.nextLine();
    }
    intonaco.setNote(data);

    // System.out.println("+++ intonaco +++\n" + data);

  }

  public Document PDFintro(Document doc, PdfWriter writer) {
    // Create output PDF

    // Load existing PDF
    PdfReader reader;
    try {
      PdfContentByte cb = writer.getDirectContent();
      reader = new PdfReader(ClassLoader.getSystemResource("document.pdf"));
      PdfImportedPage page = writer.getImportedPage(reader, 1);
      // Copy first page of existing PDF into output PDF
      cb.addTemplate(page, 0, 0);
      doc.newPage();
      writer.setPageEmpty(false);
      doc.newPage();
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }

    this.datiEdificio.PDFfront(doc);
    doc.newPage();
    writer.setPageEmpty(false);
    doc.newPage();

    this.datiEdificio.PDFindice(doc);
    doc.newPage();
    writer.setPageEmpty(false);
    doc.newPage();

    this.datiEdificio.PDFpremesse(doc);
    return doc;
  }

  public Document PDFdati(Document doc) {
    doc.newPage();
    this.muriEpareti.PDF(doc);
    this.muriPerimetrali.pdf(doc);
    this.muriIntermedi.pdf(doc);
    this.impermeabilizzazione.PDF(doc);
    this.intonaco.PDF(doc);

    return doc;
  }

  public String getProgetto() {
    return datiEdificio.getProject();
  }
}
